//package com.nuoniu.sibanyun.service.erp.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.nuoniu.sibanyun.common.exception.NuoNiuException;
//import com.nuoniu.sibanyun.entity.erp.ErpAccount;
//import com.nuoniu.sibanyun.entity.erp.ErpPeriod;
//import com.nuoniu.sibanyun.entity.erp.ErpSettleAccounts;
//import com.nuoniu.sibanyun.entity.po.VPurchaseArrivalMain;
//import com.nuoniu.sibanyun.mapper.erp.ErpSettleAccountsMapper;
//import com.nuoniu.sibanyun.mapper.po.VPoPurchaseOrderMainMapper;
//import com.nuoniu.sibanyun.mapper.po.VPurchaseArrivalMainMapper;
//import com.nuoniu.sibanyun.mapper.so.VSaleDeliveryMainMapper;
//import com.nuoniu.sibanyun.mapper.so.VSaleOrderMainMapper;
//import com.nuoniu.sibanyun.service.erp.IErpAccountService;
//import com.nuoniu.sibanyun.service.erp.IErpPeriodService;
//import com.nuoniu.sibanyun.service.erp.IErpSettleAccountsService;
//import com.nuoniu.sibanyun.service.po.IVPoPurchaseOrderMainService;
//import com.nuoniu.sibanyun.userThread.UserInfo;
//import com.nuoniu.sibanyun.userThread.UserThreadLocal;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.time.LocalDateTime;
//import java.util.List;
//
///**
// * <p>
// * 期末结账 服务实现类
// * </p>
// *
// * @author 小啊刚
// * @since 2021-06-22
// */
//@Service
//public class ErpSettleAccountsServiceImpl extends ServiceImpl<ErpSettleAccountsMapper, ErpSettleAccounts> implements IErpSettleAccountsService {
//
//    @Autowired
//    private IErpAccountService accountService;
//    @Autowired
//    private IErpPeriodService periodService;
//    @Autowired
//    private VPoPurchaseOrderMainMapper purchaseOrderMainMapper;
//    @Autowired
//    private VPurchaseArrivalMainMapper purchaseArrivalMainMapper;
//    @Autowired
//    private VSaleOrderMainMapper saleOrderMainMapper;
//    @Autowired
//    private VSaleDeliveryMainMapper saleDeliveryMainMapper;
//
//    @Override
//    public void saveSettleAccounts(ErpSettleAccounts settleAccounts) {
//        UserInfo userInfo = UserThreadLocal.get();
//        ErpAccount account = accountService.getLastErpAccount();
//        settleAccounts.setAccountYear(account.getAccountYear());
//        settleAccounts.setCompanyId(userInfo.getCompanyId());
//
//        if(settleAccounts.getId() == null) {
//            ErpSettleAccounts erpSettleAccounts = baseMapper.getByOne(settleAccounts);
//            if(erpSettleAccounts != null) {
//                settleAccounts.setId(erpSettleAccounts.getId());
//            }
//        }
//
//        checkPeriod(settleAccounts);
//        ErpPeriod period = periodService.getByPeriod(account.getAccountYear(), settleAccounts.getAccountPeriod());
//        QueryWrapper wrapper = new QueryWrapper();
//        wrapper.eq("company_id", userInfo.getCompanyId());
//        wrapper.between("voucher_date", period.getBeginDate(), period.getEndDate());
//        wrapper.eq("voucher_state", 0);
//        if(settleAccounts.getStatus()) {
//            if(settleAccounts.getModuleType().equals(1)) { //采购结账
//                //采购订单
//                Integer pOrderCount = purchaseOrderMainMapper.selectCount(wrapper);
//                if(pOrderCount > 0) {
//                    throw new NuoNiuException("该期间,采购订单有未审核的的单据,不能结账");
//                }
//
//                //采购到货单
//                Integer pPurchaseCount = purchaseArrivalMainMapper.selectCount(wrapper);
//                if(pPurchaseCount > 0) {
//                    throw new NuoNiuException("该期间,采购到货单有未审核的的单据,不能结账");
//                }
//            }
//
//            if(settleAccounts.getModuleType().equals(2)) { //销售结账
//                //销售订单
//                Integer sOrderCount = saleOrderMainMapper.selectCount(wrapper);
//                if(sOrderCount > 0) {
//                    throw new NuoNiuException("该期间,销售订单有未审核的的单据,不能结账");
//                }
//
//                //销售发货单
//                Integer sDeliveryCount = saleDeliveryMainMapper.selectCount(wrapper);
//                if(sDeliveryCount > 0) {
//                    throw new NuoNiuException("该期间,销售发货单有未审核的的单据,不能结账");
//                }
//            }
//
//            if(settleAccounts.getModuleType().equals(3)) { //库存结账
//
//            }
//        }
//
//        settleAccounts.setUserId(userInfo.getUserId());
//        settleAccounts.setOperationDate(LocalDateTime.now());
//        saveOrUpdate(settleAccounts);
//    }
//
//    @Override
//    public List<ErpSettleAccounts> getSettleAccountsList(Integer moduleType) {
//        UserInfo userInfo = UserThreadLocal.get();
//        QueryWrapper wrapper = new QueryWrapper();
//        wrapper.eq("company_id", userInfo.getCompanyId());
//        wrapper.eq("module_type", moduleType);
//        return list(wrapper);
//    }
//
//    @Override
//    public ErpSettleAccounts getSettleAccounts(Integer companyId, Integer accountYear, Integer accountPeriod, int moduleType) {
//        QueryWrapper wrapper = new QueryWrapper();
//        wrapper.eq("company_id", companyId);
//        wrapper.eq("account_year", accountYear);
//        wrapper.eq("account_period", accountPeriod);
//        wrapper.eq("module_type", moduleType);
//        wrapper.last("LIMIT 1");
//        return getOne(wrapper);
//    }
//
//    /**
//     * 检查上下期间结账状态
//     * @author 小啊刚
//     * @date 2021-06-24
//     */
//    public void checkPeriod(ErpSettleAccounts settleAccounts) {
//        if(settleAccounts.getStatus()) {
//            if(settleAccounts.getAccountPeriod() != 1) {
//                settleAccounts.setAccountPeriod(settleAccounts.getAccountPeriod() - 1);
//                ErpSettleAccounts upSettleAccounts = baseMapper.getByOne(settleAccounts);
//                if(upSettleAccounts == null || !(upSettleAccounts.getStatus())) {
//                    throw new NuoNiuException("上一期间还未结帐");
//                }
//            }
//        } else {
//            if(settleAccounts.getAccountPeriod() != 12) {
//                settleAccounts.setAccountPeriod(settleAccounts.getAccountPeriod() + 1);
//                ErpSettleAccounts upSettleAccounts = baseMapper.getByOne(settleAccounts);
//                if(upSettleAccounts == null || !(upSettleAccounts.getStatus())) {
//                    throw new NuoNiuException("下一期间还未反结帐");
//                }
//            }
//        }
//    }
//
//    /**
//     * 进销存是否结账
//     * @author 小啊刚
//     * @date 2021-06-22
//     */
//    public boolean checkInOutSettleAccounts(Integer accountPeriod) {
//        UserInfo userInfo = UserThreadLocal.get();
//        ErpAccount account = accountService.getLastErpAccount();
//        Integer result = baseMapper.checkPSIAccount(accountPeriod, account.getAccountYear(), userInfo.getCompanyId());
//        if(result > 0) {
//            return false;
//        }
//        return true;
//    }
//}
